iT邦幫忙

2

提升工作效率的好幫手 - CronTab 入門指南

  • 分享至 

  • xImage
  •  

最近開發時遇到例行繁瑣的事務,解決以後便寫下這篇文章跟大家分享,請大家不吝指教!
閱讀本篇文章,你將學到:

  • crontab 的基本概念與用途
  • 如何設定與管理排程任務
  • 實用的時間格式與特殊符號
  • 實務應用情境與範例
  • 提升工作效率的實用技巧

什麼是 Crontab?

Crontab(cron table)是 Unix/Linux 系統中的排程工具,用於安排定期執行的任務。系統會透過 cron 守護進程(daemon)定期檢查並執行設定的任務。

基本指令

查看現有排程

crontab -l

編輯排程(會進入文檔編輯器模式,可能是 vi, vim, nano)

crontab -e

基本範例

# 每天早上 8:30 執行
30 8 * * * /path/to/script.sh

# 每週一至週五下午 6 點執行
0 18 * * 1-5 /path/to/script.sh

# 每兩小時執行一次
0 */2 * * * /path/to/script.sh

時間格式說明

基本格式

欄位 分鐘 小時 日期 月份 星期 命令
範例 30 8 * * 1-5 /path/to/script.sh
說明 第30分 早上8點 每日 每月 週一到週五 要執行的指令

時間範圍表

欄位 可用範圍 說明
分鐘 0-59 每小時的第幾分鐘
小時 0-23 24小時制
日期 1-31 每月的第幾天
月份 1-12 一年中的第幾月
星期 0-7 0和7都代表星期日

特殊符號說明

符號 名稱 用途 範例
* 星號 代表任何時間 * * * * * 每分鐘執行
, 逗號 代表多個時間點 0,15,30,45 * * * * 每15分鐘執行
- 減號 代表時間範圍 0 9-17 * * * 朝九晚五每小時執行
/ 斜線 代表執行間隔 */15 * * * * 每15分鐘執行
@yearly 年度 每年執行一次 @yearly /script.sh
@monthly 月份 每月執行一次 @monthly /script.sh
@weekly 週期 每週執行一次 @weekly /script.sh
@daily 日期 每天執行一次 @daily /script.sh
@hourly 小時 每小時執行一次 @hourly /script.sh
@reboot 重啟 系統重啟時執行 @reboot /script.sh

實務應用範例

情境說明:自動化帳單處理系統

身為一位系統管理者,您可能遇到這樣的需求:

  • 每天需要從 AWS 下載昨日的帳單資料
  • 將下載的資料寫入資料庫做分析
  • 每月初要產生完整的月度報表
  • 過程中需要記錄執行狀況,方便除錯

如果手動處理,您需要:

  1. 每天早上登入 AWS 主控台
  2. 下載昨天的帳單資料
  3. 將資料整理後匯入資料庫
  4. 記錄處理狀況
  5. 每個月還要花更多時間處理月報表

使用 crontab 自動化後,這些工作都能自動完成!

完整的排程設定範例

# ====================================
# AWS 帳單自動化處理系統
# 功能:自動下載、處理、匯入每日帳單
# 更新:2024-01-01
# ====================================

# 環境變數設定
SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

# 專案路徑設定
SCRIPT_PATH=/to/your/path
LOG_PATH=/var/log/billing

# === 每日任務 ===
# 早上 8:30 從 AWS 下載昨日帳單
30 8 * * * python3 $SCRIPT_PATH/aws_bill_download.py --daily --date=$(date -d "yesterday" +\%Y-\%m-\%d) >> $LOG_PATH/download.log 2>&1

# 早上 9:00 處理並匯入資料庫
0 9 * * * python3 $SCRIPT_PATH/process_daily_bill.py >> $LOG_PATH/process.log 2>&1

# === 每月任務 ===
# 每月 4 號早上 8:00 下載上個月完整帳單
0 8 4 * * python3 $SCRIPT_PATH/aws_bill_download.py --monthly --month=$(date -d "last month" +\%Y-\%m) >> $LOG_PATH/monthly.log 2>&1

# 每月 4 號早上 8:30 產生月度報表
30 8 4 * * python3 $SCRIPT_PATH/generate_monthly_report.py >> $LOG_PATH/report.log 2>&1

# === 資料備份 ===
# 每天午夜 12:00 備份資料庫
0 0 * * * $SCRIPT_PATH/backup_database.sh >> $LOG_PATH/backup.log 2>&1

設定說明

  1. 環境變數

    • 設定基本的系統環境
    • 確保所有命令都能被正確找到
  2. 路徑管理

    • 使用變數管理腳本和日誌路徑
    • 方便後續維護與修改
  3. 任務分類

    • 每日任務:處理日常帳單
    • 月度任務:處理月報表
    • 備份任務:確保資料安全
  4. 日誌記錄

    • 每個任務都有獨立的日誌
    • 使用 2>&1 同時記錄標準輸出和錯誤
    • 方便追蹤除錯

實用小技巧

  1. 日期處理

    # 取得昨天日期
    $(date -d "yesterday" +\%Y-\%m-\%d)
    
    # 取得上個月
    $(date -d "last month" +\%Y-\%m)
    
  2. 錯誤處理

    # 記錄完整執行資訊
    command >> logfile.log 2>&1
    
  3. 註解說明

    • 使用 === 分隔不同區塊
    • 標註更新時間
    • 說明主要功能

透過這樣的設定,您可以:

  • 完全自動化日常工作
  • 有系統地管理各項任務
  • 方便地追蹤執行狀況
  • 輕鬆維護和更新設定

這就是 crontab 在實務上的強大應用!


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言